// 先生成默认josn来记录作者信息
// npm init -y  

// 每次添加的新的模块流程
// 1.下载模块
// 2.request引入模块
// 引入模块 引入外部模块需要下载
// 下载格式为npm install --save 模块名称

// 下载服务器模块后引入模块
const express = require('express'); // express为模块名
// 生成服务器对象
const app = express();
// 创建服务器静态目录 静态网址一般为目录下的index.html
app.use(express.static("www"));
// 设置服务器端口号 服务器创建完成
app.listen(3000,()=>{
    // 服务器运行成功后的回调函数
    console.log("http://localhost:3000");
})

// bodyParser模块 服务器文件需要内容
// 先下载模块
// 下载完毕后 引入模块
const bodyParser = require('body-parser');
// 配置bodyParser 那么之后接收到的post请求的数据都会直接先被
// bodyParser解析urlencoded数据格式的数据
// 默认即可Ctrl vc即可
app.use(bodyParser.urlencoded({extended:false}))

// form模块 服务器文件需要内容
// 先下载模块
// 下载完毕后 引入模块
const multer = require("multer");
// 传递的form-data中如果有文件信息;设置储存位置
const upload = multer({dest:"www/upload"});

// 若使用fs模块可以直接引用
const fs = require("fs");

// ====================================================================

// 其中/getOne 为求情地址也是网页中open后第二个参数所需要地址
// req为客户端的请求
// res是反馈给客户端的内容
// app.get中get为请求方式 也就是open中的第一个参数
app.get("/getOne",function(req,res){
console.log(req.query); // 打印出客户端也就是get请求发送的内容，在服务器中打印
res.send("传给客户端也就是网页控制台的内容")
})

// post请求方式
// upload下面的是文件的储存
app.post("/postOne",upload.single("myfile"),function(req,res){
    // req.body 获取post请求传递过来的数据
    console.log(req.file); //获取文件对象 
    console.log(req.body); //获取除了文件对象之外的其他属性 
    // fs提供的可以更改文件名的方法
    var a = `www/upload/${req.file.filename}`; // 获取上传后的文件名
    var b = `www/upload/${req.file.originalname}`; // 获取上传前的文件名
    fs.rename(a,b,(err)=>{ // 将上传后的文件名改成上传前的文件名
        if(!err){
            console.log("文件名替换成功");
        }
    })
    res.send("post响应结束")
})

// ====================================================================


// 服务器静态网址下内容
// 声明一个新对象 默认写法照抄
var xhr = new XMLHttpRequest();
// 网页发送请求的方式和地址 get/post 为请求方式 后面的是请求地址
xhr.open("get","/getOne"); 
// 发送一个请求；括号内可以写请求的内容在服务器上显示
xhr.send(); 
// 固定写法
xhr.onreadystatechange = function(){
    if(xhr.readyState === 4){ //当请求的状态为4表示响应结束后
        console.log(xhr.responseText);// 才可以获取responseText的值
    }
}